/**
 * aui-popup.js
 * @author 流浪男
 * Licensed under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 */
(function (window, undefined) {
    "use strict";
    var auiPopup = function () {};
    var isShow = false;
    auiPopup.prototype = {
        init: function (params, callback) {
            this.frameBounces = params.frameBounces;
            this.location = params.location;
            this.buttons = params.buttons;
            this.maskDiv;
            this.popupDiv;
            var self = this;
            self.open(params, callback);
        },
        open: function (params, callback) {
            var buttonsHtml = "",
                locationClass = "aui-popup-top";
            var self = this;
            if (self.popupDiv) {
                self.close();
                return;
            }
            if (!self.maskDiv) {
                self.maskDiv = document.createElement("div");
                self.maskDiv.className = "aui-mask";
                document.body.appendChild(self.maskDiv);
            }
            switch (self.location) {
                case "top":
                    locationClass = "aui-popup-top";
                    break;
                case "top-left":
                    locationClass = "aui-popup-top-left";
                    break;
                case "top-right":
                    locationClass = "aui-popup-top-right";
                    break;
                case "bottom":
                    locationClass = "aui-popup-bottom";
                    break;
                case "bottom-left":
                    locationClass = "aui-popup-bottom-left";
                    break;
                case "bottom-right":
                    locationClass = "aui-popup-bottom-right";
                    break;
                default:
                    locationClass = "aui-popup-top";
                    break;
            }
            self.popupDiv = document.createElement("div");
            self.popupDiv.className = "aui-popup " + locationClass;
            self.popupDiv.innerHTML =
                '<div class="aui-popup-arrow"></div><div class="aui-popup-content"></div>';
            document.body.appendChild(self.popupDiv);
            if (self.buttons && self.buttons.length) {
                buttonsHtml += '<ul class="aui-list aui-list-noborder">';
                for (var i = 0; i < self.buttons.length; i++) {
                    buttonsHtml +=
                        '<li class="aui-list-item aui-list-item-middle">';
                    buttonsHtml +=
                        '<div class="aui-list-item-label-icon"><img src="' +
                        self.buttons[i].image +
                        '"></div>';
                    buttonsHtml +=
                        '<div class="aui-list-item-inner">' +
                        self.buttons[i].text +
                        "</div>";
                    buttonsHtml += "</li>";
                }
                buttonsHtml += "</ul>";
            }
            document
                .querySelector(".aui-popup .aui-popup-content")
                .insertAdjacentHTML("beforeend", buttonsHtml);
            var actionsheetHeight =
                document.querySelector(".aui-popup").offsetHeight;
            self.maskDiv.classList.add("aui-mask-in");
            self.popupDiv.classList.add("aui-popup-in");
            self.popupDiv.addEventListener("touchmove", function (event) {
                event.preventDefault();
            });
            self.maskDiv.addEventListener("touchmove", function (event) {
                event.preventDefault();
            });
            if (
                typeof api != "undefined" &&
                typeof api == "object" &&
                self.frameBounces
            ) {
                api.setFrameAttr({
                    bounces: false,
                });
            }
            var popupButtons = document.querySelectorAll(
                ".aui-popup .aui-list-item",
            );
            if (popupButtons && popupButtons.length > 0) {
                setTimeout(function () {
                    self.maskDiv.onclick = function () {
                        self.close();
                        return;
                    };
                    for (var ii = 0; ii < popupButtons.length; ii++) {
                        (function (e) {
                            popupButtons[e].onclick = function () {
                                if (self.buttons[e].value) {
                                    var _value = self.buttons[e].value;
                                } else {
                                    var _value = null;
                                }
                                if (callback) {
                                    callback({
                                        buttonIndex: e + 1,
                                        buttonTitle: this.textContent,
                                        buttonValue: _value,
                                    });
                                }
                                self.close();
                                return;
                            };
                        })(ii);
                    }
                }, 350);
            }
        },
        close: function () {
            var self = this;
            if (
                typeof api != "undefined" &&
                typeof api == "object" &&
                self.frameBounces
            ) {
                api.setFrameAttr({
                    bounces: true,
                });
            }
            if (self.popupDiv) {
                var actionsheetHeight = self.popupDiv.offsetHeight;
                self.popupDiv.classList.add("aui-popup-out");
                self.maskDiv.style.opacity = 0;
                setTimeout(function () {
                    if (self.maskDiv) {
                        self.maskDiv.parentNode.removeChild(self.maskDiv);
                    }
                    self.popupDiv.parentNode.removeChild(self.popupDiv);
                    self.maskDiv = self.popupDiv = false;
                }, 300);
            }
        },
    };
    window.auiPopup = auiPopup;
})(window);
